#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
int S,N,M;
int ans;
int vis[105][105][105];
struct node{
    int s,n,m,step;
    node(int _s,int _n,int _m,int _step):s(_s),n(_n),m(_m),step(_step){}
};
void operate(int &s,int &n,int &m,int i){
    switch(i){
        //1-2
        case 1:{
            if(s+n>N){
                s=(s+n)-N;
                n=N;
            }
            else{
                n+=s;
                s=0;
            }
            break;
        }
        //1-3
        case 2:{
            if(s+m>M){
                s=(s+m)-M;
                m=M;
            }
            else{
                m+=s;
                s=0;
            }
            break;
        }
        //2-3
        case 3:{
            if(n+m>M){
                n=(n+m)-M;
                m=M;
            }
            else{
                m+=n;
                n=0;
            }
            break;
        }
        //2-1
        case 4:{
            if(n+s>S){
                n=(n+s)-S;
                s=S;
            }
            else{
                s+=n;
                n=0;
            }
            break;
        }
        //3-1
        case 5:{
            if(m+s>S){
                m=(m+s)-S;
                s=S;
            }
            else{
                s+=m;
                m=0;
            }
            break;
        }
        //3-2
        case 6:{
            if(m+n>N){
                m=(m+n)-N;
                n=N;
            }
            else{
                n+=m;
                m=0;
            }
            break;
        }
    }
}
int bfs(int target){
    memset(vis,0,sizeof(vis));
    queue<node> que;
    que.push(node(S,0,0,0));
    vis[S][0][0]=1;
    while(!que.empty()){
        node tmp=que.front();
        que.pop();
        int ts=tmp.s;
        int tn=tmp.n;
        int tm=tmp.m;
        int tstep=tmp.step;
        //printf("%d %d %d %d\n",ts,tn,tm,tstep);
        if((tn==target && tm==target) || (tm==target && ts==target) || (ts==target && tn==target)){
            return tstep;
        }
        for(int i=1;i<=6;i++){
            int ts=tmp.s;
            int tn=tmp.n;
            int tm=tmp.m;
            int tstep=tmp.step;
            operate(ts,tn,tm,i);
            //printf("%d %d %d %d %d\n",i,ts,tn,tm,tstep);
            if(!vis[ts][tn][tm]){
                que.push(node(ts,tn,tm,tstep+1));
                vis[ts][tn][tm]=1;
            }
        }
    }
    return -1;
}
int main(void){
    while(~scanf("%d%d%d",&S,&N,&M)){
        if(S==0 && N==0 && M==0){
            break;
        }
        int ans=bfs(S/2);
        if(ans==-1 || S%2==1){
            printf("NO\n");
        }
        else{
            printf("%d\n",ans);
        }
    }
    return 0;
}
